<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // promise      异步编程的一种解决方案

    // 定义； 简单说就是一个容器，里面保存着某个未来才会结束的事件的结果(通常是一个异步操作)

    // promise 对象代表一个异步操作  有三种状态
        //  Pending   (默认  进行中)
        //  Fulfilled (已完成 又称Resolved)
        //  Rejected  (已失败)

    // 特点
        // 1.   对象状态不受外界影响，需要用户通过异步操作的结果人为性的规定好的
        // 2.   Promise 对象 的状态一经改变 不能再次改变(一次性)

    // 方法
        // Promise实例的方法(p)
            // p.then
            // p.catch
            // p.finally

        // 构造函数Promise自己的方法  Array.isArray   String.fromCharCode      => 构造函数自己使用
            // all
            // race
            // allSettled
            // reject
            // resolve

    var p = new Promise(function(resolve,reject) { // 对象的状态不受外界影响 => 想要改变状态需要借助 resolve reject 方法
         //此函数相当于是一个容器  =>  可以在此函数中编写异步代码(同步也可)，在页面中立即执行，结果可能在将来才能得到
        setTimeout(function() {
           resolve(true);
           console.log(p);      // Promise {<fulfilled>: true} 状态发生改变

           reject(false);
           console.log(p);      // Promise {<fulfilled>: true} 状态改变后无法改变
        },3000);   
    })
    // reject      =>  pending(进行中状态)     =>  rejected(已失败)
    // resolve     =>  pending(进行中状态)     =>  fulfilled(已成功)
    // 注意：reject  resolve  方法出来可以改变状态，还可以携带一定数据

    console.log(p);     // Promise {<pending>}   先执行主线程

    // promise实例化对象    (通过构造函数 new 声明的都是对象)
</script>
</html>